Function.prototype.bind1 = function (context, ...args) {
  if (typeof this !== 'function') {
      throw new TypeError('The bound object needs to be a function');
  }
  const self = this;
  const fNOP = function() {};
  const fBound = function(...fBoundArgs) {
      // 指定this
      // 当作为构造函数时，this 指向实例，此时 this instanceof fBound 结果为 true
      return self.apply(this instanceof fNOP ? this : context, [...args, ...fBoundArgs]);
  }
  //  修改返回函数的 prototype 为绑定函数的 prototype,为了避免直接修改this的原型，所以新建了一个fNOP函数作为中介
  if (this.prototype) {
      fNOP.prototype = this.prototype;
  }
  fBound.prototype = new fNOP();
  return fBound;
}